package B刷题.暴力递归.B分治;

import java.util.ArrayList;
import java.util.List;

/**
 * @author wei.zhao
 * @description: 面试题 08.06.汉诺塔问题
 * @date 2022年04月14日 15:55
 */
public class Code01_Hanota {

    public static void main(String[] args) {
        List<Integer> A = new ArrayList<>();
        List<Integer> B = new ArrayList<>();
        List<Integer> C = new ArrayList<>();
        A.add(3);
        A.add(2);
        A.add(1);
        A.add(0);
        Code01_Hanota hanota = new Code01_Hanota();
        hanota.hanota(A, B, C);
    }

    public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {
        if (A == null || A.size() == 0) {
            return;
        }
        process(A, B, C, A.size());
    }

    private void process(List<Integer> A, List<Integer> B, List<Integer> C, int left) {
        if (left == 1) {
            C.add(A.remove(A.size() - 1));
        } else {
            process(A, C, B, left - 1);
            process(A, B, C, 1);
            process(B, A, C, left - 1);
        }
    }

}
